package com.obligatorio.persist.dao;

import java.util.List;

import javax.ejb.Stateless;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;

import org.apache.log4j.Logger;

import com.obligatorio.domain.Contactos;
import com.obligatorio.domain.Estados;
import com.obligatorio.domain.Usuario;

@Stateless
public class ContactoDAOBean implements ContactoDAOLocal {
	private static final Logger log = Logger.getLogger(ContactoDAOBean.class
			.getName());

	@PersistenceContext(unitName = "JPA_UNIT_OBL")
	EntityManager em;

	@Override
	public Boolean altaContacto(Contactos con) throws Exception {
		log.info("altaContacto() -> " + con.toString());
		Boolean result = false;
		try {
			em.persist(con);
			result = true;
		} catch (Exception e) {
			log.error(e.getCause());
			e.printStackTrace();
			return result;
		}
		return result;
	}

	@Override
	public Usuario modificarUsuario(Usuario invitado) throws Exception {
		// TODO Auto-generated method stub
		return null;
	}

	@Override
	public Boolean confirmarContacto(Contactos con) throws Exception {
		log.info("confirmarContacto() -> " + con.toString());
		Boolean result = false;
		try {
			em.persist(con);
			result = true;
		} catch (Exception e) {
			log.error(e.getCause());
			e.printStackTrace();
			return result;
		}
		return result;
	}

	@Override
	public Contactos buscarContacto(String codigoAct, Usuario invitado)
			throws Exception {
		Contactos tmpContacto = null;
		try {
			tmpContacto = em.createNamedQuery("findContact", Contactos.class)
					.setParameter("CODIGO", codigoAct)
					.setParameter("Usuario", invitado)
					.setParameter("STATUS", Estados.ESPERA_ACTIVACION)
					.getSingleResult();
		} catch (Exception e) {
			log.error("buscarContacto > " + e.toString());
			return null;
		}
		return tmpContacto;
	}
	
	@Override
	public List<Contactos> ObtenerTodoLosContactos(Usuario user)
			throws Exception {
		log.info("obtenerTodoLosEstudios()");
		try {
			List<Contactos> res = (List<Contactos>) em.createNamedQuery("findAllContactsUser", Contactos.class)
					.setParameter("Usuario", user)
					.setParameter("STATUS", Estados.ACTIVO)
					.getResultList();
			log.info("Count Estudios : "+res.size());
			return res;
		} catch (Exception e) {
			e.printStackTrace();
		}
		return null;
	}

	@Override
	public Boolean eliminarContacto(Contactos con) throws Exception {
		log.info("altaContacto() -> " + con.toString());
		Boolean result = false;
		try {
			em.merge(con);
			//em.persist(con);
			result = true;
		} catch (Exception e) {
			log.error(e.getCause());
			e.printStackTrace();
			return result;
		}
		return result;
	}

}
